function nextGreaterElement(nums1: number[], nums2: number[]): number[] {
    const map = new Map<number, number>();
    const stack = [];

    for(let i = nums2.length - 1; i >-1; i--){
        const nums = nums2[i];
        // 栈底到栈顶由大到小
        // 当栈不为空 且 当前元素比栈顶大的时候 出栈 
        // 直到栈顶元素比当前元素大 或者是空栈
        while(stack.length && nums> stack[stack.length -1]){
            stack.pop();
        }

        // 键值对 为空为-1则右侧无元素比当前元素大 
        // 不为空时将栈顶元素作为比当前元素大的值作为值存入map
        // console.log(stack)
        map.set(nums, stack.length?stack[stack.length - 1]:-1);
        // 入栈 确保数组2右侧没有比当前元素更大的值
        stack.push(nums);
    }

    // 因为数组1中的元素在数组2中可以找到 所以直接使用将nums1作为键寻找map中的值
    // console.log(map)
    return new Array(nums1.length).fill(0).map((_,i)=> map.get(nums1[i]))
};

const nums15 = [4, 1, 2], nums16 = [1, 3, 4, 2]
console.log(nextGreaterElement(nums15,nums16))